package cn.blogsx.annotation;

/**
 * 自定义注解
 */

/**
 * javap命令反编译的结果：
 * Compiled from "MyAnno.java"
 * public interface MyAnno extends java.lang.annotation.Annotation {
 * }
 * 注解本质：
 *         注解本质就是一个接口，该接口默认继承 java.lang.annotation.Annotation 接口
 *
 * 注解属性：接口中的抽象方法
 *  *要求：
 *      1.属性的返回值类型
 *          1.基本数据类型
 *          2.String类型
 *          3.枚举
 *          4.注解
 *          5.以上类型的数组
 *      2.定义了属性，在使用时需要给属性赋值
 *          1.如果定义属性时，使用default关键字给属性默认初始化，
 *            则使用注解时可以不进行属性的赋值
 *          2.如果只有一个属性要赋值，并且属性的名称是value,则value可以省略不写
 *          3.数组赋值是，使用{}赋值。如果数组中只有一个值，则可以省略{}
 *
 *
 *
 * 元注解：用于描述注解的注解
 *      @Target 描述注解能够作用的位置
 *              ElementType取值：
 *              TYPE：作用在类上
 *              FIELD：作用在成员变量上
 *              METHOD：作用在方法上
 *
 *      @Retention 描述注解 被保留的阶段
 *      @Documented 描述注解是否被抽取到api文档中
 *      @Inherited 描述注解是否被子类继承
 *
 * 在程序中使用（解析）注解：获取注解中定义的属性值
 *
 */
public @interface MyAnno {
        int value();
//        String name() default "张三";
//
        Person per();
//
        MyAnno2 anno2();
//
        String[] strs();
}
